# include <stdio.h>


/**
 * @brief 主函数，演示指针运算和类型转换。
 *
 * 该函数定义了一个双精度浮点数组，并使用指针进行内存地址和值的操作。
 * 通过打印不同类型的指针运算结果，展示指针和类型转换的特性。
 *
 * @return int 返回值为0，表示程序正常结束。
 */
int main() {
    // 定义一个包含两个双精度浮点数的数组，并初始化
    double a[2] = {1.2, 3.1}, *p, *q;

    // 将指针p指向数组a的第一个元素
    p = &a[0];

    // 将指针q指向数组a的第二个元素
    q = p + 1;

    // 打印两个指针的内存地址差值（以字节为单位）
    // 由于指针类型为double*，指针q - p的实际差值会被sizeof(double)放大
    printf("%d\n", (int) q - (int) p);

    // 打印两个指针的元素差值（以数组元素为单位）
    // 结果为1，表示q指向p的下一个元素
    printf("%d\n", q - p);

    // 打印两个指针所指向的值的差值（以整数形式打印）
    printf("%d\n", (int) *q - (int) *p);

    // 返回0，表示程序正常结束
    return 0;
}

